实验二 适配器模式和桥接模式设计实验及其Java实现
开课实验室: 开课时间: 2016年**月**日 实验报告: 年 月 日
学院名称 |
|
年级、专业、班 |
|
学号 |
|
姓名 |
|
同组姓名 |
|
|||
课程名称 |
软件架构 |
实验项目名称 |
实验二 适配器模式和桥接模式设计实验 |
指导教师 |
|
|||||||
实验类型 |
验证 √ 综合 □ 设计 □ 创新 □ |
成绩 |
|
|||||||||
教师评语 |
教师签名: 年 月 日 |
|||||||||||
一、实验目的
通过本实验的学习,了解软件体系结构与软件体系设计的基本思想,掌握工厂方法、抽象工厂模式等软件体系结构的设计与实现方法,利用Rose软件绘制软件体系的静态结构图,并利用面向对象的程序设计语言模拟实现工厂方法、抽象工厂模式,为今后软件开发与设计的学习奠定基础。
二、实验环境
实验仪器为PC机一台,安装StarUML软件和MyEclipse软件。
三、实验内容
1、熟悉StarUML软件的界面和基本操作。
2、掌握StarUML软件的基本使用方法,能够运用StarUML软件绘制适配器模式、桥接模式的UML类图和模式结构图。
3、学习利用java语言实现代理适配器模式、桥接模式,并确保代码运行正确无误。
四、实验步骤
1、熟悉StarUML的常用功能。
2、使用StarUML绘制类图;
3、适配器模式设计与实现:“一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。为了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队实现。但合作团队将角度对象绘制函数定为了DrawAngle()。绘图系统提供给用户后,用户不满意,希望能统一的调用,不用记太多命令。”使用StarUML绘制适配器模式结构图,并运用面向对象编程语言实现该模式。
4、桥接模式设计与实现:“一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶(Milk),或者糖(Sugar),或者柠檬(Lemon),提供给用户不同口味的组合,如大杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。”使用桥接模式设计该系统并绘制相应的类图,并用面向对象编程语言实现该模式。
适配器模式设计与实现:
package Adapter;
public interface Draw {
void Draw();
}
package Adapter;
public class Circle implements Draw {
public void Draw() {
System.out.println("Draw a Circle");
}
}
package Adapter;
public class Line implements Draw {
public void Draw() {
System.out.println("Draw a Line");
}
}
package Adapter;
public class Angle {
public void DrawAngle(){
System.out.println("Draw a Angle");
}
}
package Adapter;
public class AngleAdapter implements Draw {
private Angle angle;
public AngleAdapter(Angle a)
{
this.angle = a;
}
public void Draw() {
angle.DrawAngle();
}
}
package Adapter;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Rectangle rec = new Rectangle();
Circle cir = new Circle();
Line lin = new Line();
Angle an = new Angle();
rec.Draw();
cir.Draw();
lin.Draw();
AngleAdapter ad = new AngleAdapter(an);
ad.Draw();
}
}
运行结果:
桥接模式模式设计与实现:
package Bridge;
public class Coffee {
protected Taste taste;
public Taste getTaste() {
return taste;
}
public void setTaste(Taste taste) {
this.taste = taste;
}
public void add(){
System.out.println("I have a cup of coffee");
}
}
package Bridge;
public class JorumCoffee extends Coffee {
public void add(){
System.out.println("I have a cup of JorumCoffee "+taste.Add()+" in");
}
}
package Bridge;
public class MediumCoffee extends Coffee {
public void add(){
System.out.println("I have a cup of MediumCoffee "+taste.Add()+" in");
}
}
package Bridge;
public class SmallCoffee extends Coffee {
public void add(){
System.out.println("I have a cup of SmallCoffee "+taste.Add()+" in");
}
}
package Bridge;
public abstract class Taste {
public abstract String Add();
}
package Bridge;
public class Lemon extends Taste {
public String Add() {
return "Lemon";
}
}
package Bridge;
public class Milk extends Taste {
public String Add() {
return "Milk";
}
}
package Bridge;
public class Sugar extends Taste {
public String Add() {
return "Sugar";
}
}
package Bridge;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Milk milk=new Milk();
Sugar sugar = new Sugar();
Lemon lemon = new Lemon();
Coffee cof=new JorumCoffee();
cof.setTaste(milk);
cof.add();
Coffee mc = new MediumCoffee();
mc.setTaste(sugar);
mc.add();
Coffee sc = new SmallCoffee();
sc.setTaste(lemon);
sc.add();
}
}
运行结果: